/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package com.dao;
import com.metier.carteController;
import com.ihm.FenetreAjouter;
import com.ihm.FenetreConsultation;
import com.ihm.FenetreEdition;
import com.ihm.FenetreModification;

import java.text.SimpleDateFormat;
import java.util.*;
import java.sql.*;
import java.io.File ;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JOptionPane;


public class CartePreparedRequete 
{
    
	      private static PreparedStatement ps;
	      private static Connecter connector;
	      private File file;
	      private JDialog dialogerreur;
	      private static ResultSet rs;
	      private static String date;
	      private static ArrayList<Integer> Idlist;
              private static ArrayList<String> Datelist;
              private static ArrayList<String> titre ;
	      private static ArrayList<byte[]> image ;
	      private static ArrayList<String> description ;
	      private static ArrayList<Integer> listid ;
	      private static ArrayList<Integer> Idfiltrelist ;
	      private static ArrayList<String> Datefiltrelist;
	      private static ArrayList<String> titrefiltre ;
	      private static ArrayList<String> descriptionfiltre ;
              
	      public static ArrayList<Integer> getIdlist() {
                    return Idlist;
              }
              
              public static void setIdlist(ArrayList<Integer> idlist)
              {
                    Idlist = idlist;
              }
 
	      public void setDatelist(ArrayList<String> date)
              {
                    Datelist = date;
              }
              
	      public static ArrayList<String> getDatelist()
	      {
                    return Datelist ;
	      }
	      
              public static void setDate(String date)
              {
                    CartePreparedRequete.date = date;
              }
              
              public static ArrayList<Integer> getListid()
              {
                    return listid;
              }
              
              public static void setListid(ArrayList<Integer> listid)
              {
                    CartePreparedRequete.listid = listid;
              }
              
              public static ArrayList<String> getTitre() {
                    return titre;
              }
              
              public static void setTitre(ArrayList<String> titre) {
                    CartePreparedRequete.titre = titre;
              }
              
              public static ArrayList<byte[]> getImage() {
                    return image;
              }

              public static void setImage(ArrayList<byte[]> image) {
                    CartePreparedRequete.image = image;
              }
              
              public static ArrayList<String> getDescription() {
                    return description;
              }
              
              public static void setDescription(ArrayList<String> description) {
                    CartePreparedRequete.description = description;
              }
              
             public CartePreparedRequete()
             {   
            	 connector = new Connecter();
             }

             public void Ajouter()throws SQLException
             {   
                
                    {file = new File(FenetreAjouter.getPath().getText());
                    InputStream photoStream = null;
                                   try {
                                           photoStream = new FileInputStream(file);
                                   } catch (FileNotFoundException e) {
                                           // TODO Auto-generated catch block
                                           e.printStackTrace();
                                   }
                    String sql ="INSERT INTO carte(DateCreationCarte,TitreCarte,DescriptionCarte,ImageCarte) VALUES(?,?,?,?)";
                    ps = connector.getConnection().prepareStatement(sql);
                    ps.setTimestamp(1,new java.sql.Timestamp(Calendar.getInstance().getTime().getTime()));
                    ps.setString(2,FenetreAjouter.getTexttitre().getText() );
                    ps.setString(3,FenetreAjouter.getTextDescription().getText());
                    ps.setBlob(4, photoStream);            	 
                    ps.executeUpdate();
                    ps.close();
                    JOptionPane.showMessageDialog(null, "R¨¦ussite de l'ajout d'une carte");
                }
                
             }

             public void effacer()
             {
            	 FenetreAjouter.getTextDescription().setText(null);
            	 FenetreAjouter.getTexttitre().setText(null);
            	 FenetreAjouter.getPath().setText(null);
             }
             
             public void showdialog(String title,String message)
             {
            	 dialogerreur=new JDialog();
            	 dialogerreur.setTitle(title);
            	 dialogerreur.add( new JLabel(message));
            	 dialogerreur.setLocationRelativeTo(null);
            	 dialogerreur.setSize(300,100);
            	 dialogerreur.setResizable(false);
            	 dialogerreur.setModal(true);
            	 dialogerreur.setVisible(true);
             }
             
             public static void afficher()throws SQLException
             {  Datelist = new ArrayList<>();
                titre = new ArrayList<>();
                description = new ArrayList<>();
                Idlist = new ArrayList<>();
            	 String sql = "SELECT * FROM carte";
            	 ps = connector.getConnection().prepareStatement(sql);
            	 rs = ps.executeQuery();
            	 while(rs.next())
            	 {  
            		 Datelist.add(rs.getTimestamp("DateCreationCarte").toString());
            		 titre.add(rs.getString("TitreCarte"));
            		 description.add(rs.getString("DescriptionCarte"));
                     Idlist.add(rs.getInt("ID_Carte"));
            	 }
             }
             
             public static void afficherfilter() throws SQLException
             {    String sql ;
                  Idfiltrelist = new ArrayList<>();
                  Datefiltrelist = new ArrayList<>();
                  titrefiltre = new ArrayList<>();
                  descriptionfiltre = new ArrayList<>();
            	 if(!FenetreEdition.getTitrenom().getText().isEmpty()&&FenetreEdition.getTitredescription().getText().isEmpty())
            	 {
            		 sql ="SELECT * FROM carte WHERE TitreCarte LIKE ? ";
            		 ps =connector.getConnection().prepareStatement(sql);
            		 ps.setString(1, "%"+FenetreEdition.getTitrenom().getText().toString()+"%");
            		 rs = ps.executeQuery();
            		 while(rs.next())
            		 {
            			 Datefiltrelist.add(rs.getTimestamp("DateCreationCarte").toString());
                		 titrefiltre.add(rs.getString("TitreCarte"));
                		 descriptionfiltre.add(rs.getString("DescriptionCarte"));
                         Idfiltrelist.add(rs.getInt("ID_Carte"));
            		 }
            		 JOptionPane.showMessageDialog(null,"Voici les resultats du titre qui contients  "+FenetreEdition.getTitrenom().getText().toString());
            	 }
            	 else if(FenetreEdition.getTitrenom().getText().isEmpty()&&!FenetreEdition.getTitredescription().getText().isEmpty())
            	 {
            		
            		
            		   sql ="SELECT * FROM carte WHERE DescriptionCarte LIKE ? ";
                       ps = connector.getConnection().prepareStatement(sql);
                       ps.setString(1, "%"+FenetreEdition.getTitredescription().getText().toString()+"%");
            		   rs = ps.executeQuery();
            		   while(rs.next()){
            			   Datefiltrelist.add(rs.getTimestamp("DateCreationCarte").toString());
                  		 titrefiltre.add(rs.getString("TitreCarte"));
                  		 descriptionfiltre.add(rs.getString("DescriptionCarte"));
                           Idfiltrelist.add(rs.getInt("ID_Carte"));
                       }
            		   JOptionPane.showMessageDialog(null, "Voici les résultats de la description qui contient: "+FenetreEdition.getTitredescription().getText().toString());
  
            		
                 }
            	 else if(!FenetreEdition.getTitrenom().getText().isEmpty()&&!FenetreEdition.getTitredescription().getText().isEmpty())
            	 {   

            		 sql ="SELECT * FROM carte WHERE TitreCarte LIKE ? AND DescriptionCarte LIKE ?";
            		 ps = connector.getConnection().prepareStatement(sql);
            		 ps.setString(1,"%"+FenetreEdition.getTitrenom().getText()+"%");
            		 ps.setString(2, "%"+FenetreEdition.getTitredescription().getText()+"%");
            		 rs = ps.executeQuery();
            		 while(rs.next())
            		 {
            			 Datefiltrelist.add(rs.getTimestamp("DateCreationCarte").toString());
                		 titrefiltre.add(rs.getString("TitreCarte"));
                		 descriptionfiltre.add(rs.getString("DescriptionCarte"));
                         Idfiltrelist.add(rs.getInt("ID_Carte"));
            		 }
            		 JOptionPane.showMessageDialog(null, "Voici les résultats du titre qui contients: "+FenetreEdition.getTitrenom().getText().toString()+"\n du decription aui contients "+FenetreEdition.getTitredescription().getText().toString());
            	 }
             }
             
             public static void afficherfilterconsultation() throws SQLException
             {    
                 String sql ;
                 Idfiltrelist = new ArrayList<>();
                 Datefiltrelist = new ArrayList<>();
                 titrefiltre = new ArrayList<>();
                 descriptionfiltre = new ArrayList<>();
                 
            	 if(!FenetreConsultation.getTexttitre().getText().isEmpty()&&FenetreConsultation.getTextdescription().getText().isEmpty())
            	 {
            		 sql ="SELECT * FROM carte WHERE TitreCarte LIKE ? ";
            		 ps =connector.getConnection().prepareStatement(sql);
            		 ps.setString(1, "%"+FenetreConsultation.getTexttitre().getText().toString()+"%");
            		 rs = ps.executeQuery();
            		 while(rs.next())
            		 {
            			 Datefiltrelist.add(rs.getTimestamp("DateCreationCarte").toString());
                		 titrefiltre.add(rs.getString("TitreCarte"));
                		 descriptionfiltre.add(rs.getString("DescriptionCarte"));
                         Idfiltrelist.add(rs.getInt("ID_Carte"));
            		 }
            		 JOptionPane.showMessageDialog(null,"Voici les résultats du titre qui contient: "+FenetreConsultation.getTexttitre().getText().toString());
            	 }
            	 else if(FenetreConsultation.getTexttitre().getText().isEmpty()&&!FenetreConsultation.getTextdescription().getText().isEmpty())
            	 {

                    sql ="SELECT * FROM carte WHERE DescriptionCarte LIKE ? ";
                    ps = connector.getConnection().prepareStatement(sql);
                    ps.setString(1, "%"+FenetreConsultation.getTextdescription().getText().toString()+"%");

                    rs = ps.executeQuery();
                    while(rs.next())
                    {
                        Datefiltrelist.add(rs.getTimestamp("DateCreationCarte").toString());
                        titrefiltre.add(rs.getString("TitreCarte"));
                        descriptionfiltre.add(rs.getString("DescriptionCarte"));
                        Idfiltrelist.add(rs.getInt("ID_Carte"));
                    }

                    JOptionPane.showMessageDialog(null, "Voici les résultats de la description qui contient:  "+FenetreConsultation.getTextdescription().getText().toString());
                    
                 }
            	 else if(!FenetreConsultation.getTexttitre().getText().isEmpty()&&!FenetreConsultation.getTexttitre().getText().isEmpty())
            	 {   

                    sql ="SELECT * FROM carte WHERE TitreCarte LIKE ? AND DescriptionCarte LIKE ?";
            	    ps = connector.getConnection().prepareStatement(sql);
            	    ps.setString(1,"%"+FenetreConsultation.getTexttitre().getText()+"%");
            	    ps.setString(2, "%"+FenetreConsultation.getTextdescription().getText()+"%");
                    rs = ps.executeQuery();
                    while(rs.next())
            	    {    
                        Datefiltrelist.add(rs.getTimestamp("DateCreationCarte").toString());
                	titrefiltre.add(rs.getString("TitreCarte"));
                        descriptionfiltre.add(rs.getString("DescriptionCarte"));
                        Idfiltrelist.add(rs.getInt("ID_Carte"));
            	    }
                    
            	    JOptionPane.showMessageDialog(null, "Voici les résultats du titre qui contient: "+FenetreConsultation.getTexttitre().getText().toString()+"\n et de la decription qui contient: "+FenetreConsultation.getTexttitre().getText().toString());
                    
            	 }
             }
             
             
             public static ArrayList<Integer> getIdfiltrelist() {
				return Idfiltrelist;
             }

            public static void setIdfiltrelist(ArrayList<Integer> idfiltrelist) {
                    Idfiltrelist = idfiltrelist;
            }

            public static ArrayList<String> getDatefiltrelist() {
                    return Datefiltrelist;
            }

            public static void setDatefiltrelist(ArrayList<String> datefiltrelist) {
                    Datefiltrelist = datefiltrelist;
            }

            public static ArrayList<String> getTitrefiltre() {
                    return titrefiltre;
            }

            public static void setTitrefiltre(ArrayList<String> titrefiltre) {
                    CartePreparedRequete.titrefiltre = titrefiltre;
            }

            public static ArrayList<String> getDescriptionfiltre() {
                    return descriptionfiltre;
            }

            public static void setDescriptionfiltre(ArrayList<String> descriptionfiltre) {
                    CartePreparedRequete.descriptionfiltre = descriptionfiltre;
            }

            public void modifier()throws SQLException
            {    
                  Integer id;
                  {
                    String sql;
                  
                    if(!FenetreModification.getTexttitre().getText().isEmpty())
                    {
                               if(FenetreModification.getTextimage().getText().isEmpty())
                               { 
                                     sql ="UPDATE carte SET TitreCarte=?,DescriptionCarte=? WHERE ID_Carte = ?";
                                     ps = connector.getConnection().prepareStatement(sql);
                                     ps.setString(1,FenetreModification.getTexttitre().getText());
                                     ps.setString(2,FenetreModification.getTextdescription().getText());
                                     id = Integer.valueOf(FenetreModification.getText_id().getText());
                                     ps.setInt(3,id);
                                     ps.executeUpdate();
                                     JOptionPane.showMessageDialog(null,"Réussite de la modification en reservant la carte");
                               }
                               else
                               {
                                   File file = new File(FenetreModification.getTextimage().getText());
                                   InputStream photostream=null;
                                             try {
                                                     photostream = new FileInputStream(file);
                                             } catch (FileNotFoundException e) {
                                                     // TODO Auto-generated catch block
                                                     e.printStackTrace();
                                             }
                                       sql ="UPDATE carte SET TitreCarte=?,DescriptionCarte=?,ImageCarte=? WHERE ID_Carte=?";
                                       ps = connector.getConnection().prepareStatement(sql);
                                       ps.setString(1,FenetreModification.getTexttitre().getText());
                                       ps.setString(2, FenetreModification.getTextdescription().getText());
                                       ps.setBlob(3,photostream);
                                       id = Integer.valueOf(FenetreModification.getText_id().getText());
                                       ps.setInt(4, id);
                                       ps.executeUpdate();
                                       JOptionPane.showMessageDialog(null,"Réussite de la modification avec la carte");
                               }
                               ps.close();
                      }
                      else
                      {
                             JOptionPane.showMessageDialog(null,"Le titre est vide!");
                      }
                
                  }
                  
             }
             
             public void supprimer() throws SQLException
             {  
                 String sql = "DELETE FROM carte WHERE ID_Carte=?";
                 int index ;
            	 ps = connector.getConnection().prepareStatement(sql);
            	 index = Integer.valueOf(FenetreModification.getText_id().getText());
                 ps.setInt(1,index);
                 ps.execute();
                 JOptionPane.showMessageDialog(null, "Réussite de la suppression");
             }
}
